<?php
	
/** @brief Clase que es encargada de generar toda la pagina web.
	Esta clase es el x_container por excelencia, ya que es encargada de renderizar
	todo, generar los codigos XHTML, y grabar los archivos JS y CSS con los datos de 
	todos los componentes.
*/
	class c_page extends x_container{
		private $creatorfile; ///< nombre del php/xml que construyo esta pagina (para comparar la fecha con el cahe)
		private $cachedfiles; ///< path y nombre de los archivos de cache (sin extencion)
		private $lbpath;      ///< path a lazybox (donde se encuentra lazybox.inc.php)

		function __construct($creatorfile,$lbpath='lazybox'){
			$this->creatorfile=$creatorfile;
			$this->lbpath=$lbpath;
			$this->cachedfiles=CACHE_DIR.$this->fname2cache($creatorfile);
			if(!file_exists(CACHE_DIR))
				mkdir(CACHE_DIR);
			parent::__construct('page');
		//	$this->events->ureg_all(); /*desregistro todo, porque esn realidad no necesito heredar de x_graphic*/
	//		$this->props->ureg_all();
			$this->props->reg_arr( array('title','css','script','favicon') );
			$this->events->reg_arr( array('onload') );
		}

		private function fname2cache($fname){
			/*remuevo el path, windows o linux*/
			$s = substr(strrchr($fname, '/'),1);
			if($s===false)//path de win
				$s = substr(strrchr($fname, "\\"),1);

			$s=preg_replace("/\.php$/", '', $s);//saca el .php del final
			return $s;
		}
		
		private function rebuildcache($fname){
			return !file_exists($fname) || filemtime($fname)<filemtime($this->creatorfile);
		}
		
/** @brief Escribe el CSS generado por renderCSS() a un archivo.
	El nombre de archivo esta definido en la constante AUTO_FILE_CSS en const.inc.php
    @return Nada.
*/
		private function writeCSS($filename){
			$h=fopen($filename,'w');
			fwrite( $h, parent::renderCSS() );
			fclose($h);
		}
		
/** @brief  Escribe el JavaScript generado por renderJS() a un archivo.
	El nombre de archivo esta definido en la constante AUTO_FILE_JS en const.inc.php
    @return Nada.
*/
		private	function writeJS($filename){
			$pre='var '.BEH_ARRAY.' = new Array()'."\n";
			$post='Behaviour.register('.BEH_ARRAY.')';
			$h=fopen($filename,'w');
			fwrite( $h, $pre);
			fwrite( $h, parent::renderJS() );
			fwrite( $h, $post);
			fwrite( $h, "\n\n/*---INICIO XAJAX---*/\n" );
			$x=$this->getxajax()->getJavascriptConfig();
			$x=str_replace('<script type="text/javascript">','',$x);
			$x=str_replace('</script>','',$x);
			fwrite( $h,$x) ;
			fwrite( $h, "\n/*---FIN XAJAX---*/\n" );
			fclose($h);
		//	var_dump($this->getxajax());
		}
		
		function renderXHTML(){
			$this->getxajax()->processRequest();
			
			$js=$this->cachedfiles.'.js';
			$css=$this->cachedfiles.'.css';
			if($this->rebuildcache($css)){
			//	echo('rebuildCSS-');
				$this->writeCSS($css);
			}
			if($this->rebuildcache($js)){
			//	echo('rebuildJS-');
				$this->writeJS($js);
			}
			
			$s='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'."\n";
			$s.='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >'."\n";
			$s.='<head>'."\n";
			$s.=addtabs('<title>'.$this->get_prop('title').'</title>');
			$s.=addtabs('<script type="text/javascript" src="'.$this->lbpath.'/js/behaviour.js"></script>');
			$s.=addtabs('<script type="text/javascript" src="'.$this->cachedfiles.'.js'.'"></script>');
			$s.=addtabs('<script type="text/javascript" src="'.$this->lbpath.'/core/xajax/xajax_js/xajax_core.js"></script>');
			$s.=addtabs('<script type="text/javascript" src="'.$this->lbpath.'/core/xajax/xajax_js/xajax_debug.js"></script>');
			if($this->props->assingned('script'))
				$s.=addtabs('<script type="text/javascript" src="'.$this->get_prop('script').'"></script>');
			$s.=addtabs('<link rel="stylesheet" href="'.$this->cachedfiles.'.css'.'" />');
			if($this->props->assingned('css'))
				$s.=addtabs('<link rel="stylesheet" href="'.$this->get_prop('css').'" />');
			$s.=addtabs('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>');
			if($this->props->assingned('favicon'))
				$s.=addtabs('<link rel="shortcut icon" href="'.$this->get_prop('favicon').'" type="image/x-icon">');
			$s.='</head>'."\n";
			$s.='<body>'."\n";
			$s.=parent::renderXHTML();
			$s.='</body>'."\n";
			$s.='</html>'."\n";
			
			return $s;
		}
	}


x_factory::reg_comp('page','c_page');	

?>